import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const api = axios.create({
  baseURL: '/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    console.log('发送请求:', config.url, config.data || config.params)
    return config
  },
  (error) => {
    // 对请求错误做些什么
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    // 对响应数据做点什么
    console.log('收到响应:', response.config.url, response.data)
    return response
  },
  (error) => {
    // 对响应错误做点什么
    console.error('响应错误:', error)
    
    let message = '网络错误'
    if (error.response) {
      // 服务器返回了错误状态码
      switch (error.response.status) {
        case 400:
          message = '请求参数错误'
          break
        case 401:
          message = '未授权访问'
          break
        case 403:
          message = '禁止访问'
          break
        case 404:
          message = '请求的资源不存在'
          break
        case 500:
          message = '服务器内部错误'
          break
        default:
          message = `请求失败 (${error.response.status})`
      }
    } else if (error.request) {
      // 请求已发出但没有收到响应
      message = '网络连接失败，请检查网络设置'
    } else {
      // 其他错误
      message = error.message || '未知错误'
    }
    
    ElMessage.error(message)
    return Promise.reject(error)
  }
)

// 小车控制API
export const carApi = {
  // 按钮控制
  buttonControl: (direction) => api.post('/car/control/button', null, { params: { direction } }),
  
  // 摇杆控制
  joystickControl: (speedX, speedY) => api.post('/car/control/joystick', { speedX, speedY }),
  
  // 四轮控制
  wheelControl: (l1, l2, r1, r2) => api.post('/car/control/wheels', { l1, l2, r1, r2 }),
  
  // 循迹控制
  startTracking: () => api.post('/car/tracking/start'),
  stopTracking: () => api.post('/car/tracking/stop'),
  
  // 相机控制
  takePhoto: () => api.post('/car/camera/photo'),
  startRecording: () => api.post('/car/camera/record/start'),
  stopRecording: () => api.post('/car/camera/record/stop')
}

// 网络配置API
export const networkApi = {
  // 配置网络
  config: (config) => api.post('/network/config', config),
  
  // 获取连接状态
  getStatus: () => api.get('/network/status'),
  
  // 断开连接
  disconnect: () => api.post('/network/disconnect')
}

// 通用API方法
export const commonApi = {
  // 成功提示
  showSuccess: (message) => {
    ElMessage.success(message)
  },
  
  // 错误提示
  showError: (message) => {
    ElMessage.error(message)
  },
  
  // 警告提示
  showWarning: (message) => {
    ElMessage.warning(message)
  },
  
  // 信息提示
  showInfo: (message) => {
    ElMessage.info(message)
  }
}

export default api 